package com.anquing.config;

import com.anquing.controller.HelloController;
import com.anquing.interceptor.HelloInterceptor;
import com.jfinal.config.*;
import com.jfinal.template.Engine;


public class DemoConfig extends JFinalConfig {


    @Override
    public void configConstant(Constants me) {
        me.setDevMode(true);

    }

    /*  finalView = baseViewPath + viewPath + view
    注意：当view以 “/” 字符打头时表示绝对路径，baseViewPath 与 viewPath 将被忽略。
    */
    @Override
    public void configRoute(Routes me) {
        me.setBaseViewPath("/view");
        me.addInterceptor(new HelloInterceptor());
//        me.add("/hello", HelloController.class);//当viewPath未指定时默认值为controllerKey。
        me.add("/hello", HelloController.class,"/hello");

    }

    /**
     * 上面的方法向模板引擎中添加了三个定义了 template function 的模板文件
     * @param me
     */
    @Override
    public void configEngine(Engine me) {
        me.addSharedFunction("/view/common/layout.html");
    }

    //此方法用来配置JFinal的Plugin，如下代码配置了Druid数据库连接池插件与ActiveRecord数据库访问插件。通过以下的配置，可以在应用中使用ActiveRecord非常方便地操作数据库。
    @Override
    public void configPlugin(Plugins me) {

//        String jdbcUrl= "";
//        String userName = "";
//        String password = "";
//
//        DruidPlugin dp = new DruidPlugin(jdbcUrl, userName, password);
//        me.add(dp);
//
//        ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
//        arp.addMapping("user", User.class);
//        me.add(arp);

    }

    //此方法用来配置JFinal的全局拦截器，全局拦截器将拦截所有 action 请求，除非使用@Clear在Controller中清除，如下代码配置了名为AuthInterceptor的拦截器
    //JFinal 的 Interceptor 非常类似于 Struts2，但使用起来更方便，Interceptor 配置粒度分为 Global、Inject、Class、Method四个层次，其中以上代码配置粒度为全局。Inject、Class与Method级的Interceptor配置将在后续章节中详细介绍。

    @Override
    public void configInterceptor(Interceptors me) {

//        me.add(new AuthInterceptor());

    }

//此方法用来配置JFinal的Handler，如下代码配置了名为ResourceHandler的处理器，Handler可以接管所有web请求，并对应用拥有完全的控制权，可以很方便地实现更高层的功能性扩展。
    @Override
    public void configHandler(Handlers me) {
//            me.add(new ResourceHandler());

    }

    //在 JFinalConfig 继承类中可以添加 afterJFinalStart() 与 beforeJFinalStop()，JFinal 会在系统启动完成之后以及系统关闭之前分别回调这两个方法：
    // 这两个方法可以很方便地在项目启动后与关闭前让开发者有机会进行额外操作，如在系统启动后创建调度线程或在系统关闭前写回缓存。
    // 系统启动完成后回调
    @Override
    public void afterJFinalStart() {
    }

    // 系统关闭之前回调
    @Override
    public void beforeJFinalStop() {
    }

}
